
#include "parser_parametros.h"

#define activado 	1
#define no_activado 0

bool verificar_cant_parametros(int cant){	
	if(cant < 3) { //minimo nombre,segundos, tam buffer
		throw std::runtime_error("Error - Faltan parametros.");
		return false;
	}
	if(cant > 4) { //maximo nombre, segundos, tam buffer, muestreo act
		throw std::runtime_error("Error - Hay mas parametros que el maximo.");
		return false;
	}
	return true;
}
ParserParametros::~ParserParametros(){}

ParserParametros::ParserParametros(){
		parametros[0] = 0; //defino por defecto 0 los segundos de espera
		parametros[1] = 0; //defino por defecto 0 el tamanio del buffer
		parametros[2] = no_activado; //defino por defecto el muestreo no_activado
	}
		
int ParserParametros::get_can_parametros(){
	return cant_parametros;	
}
		
int ParserParametros::get_segundos(){
	return parametros[0];
}	
		
		
int ParserParametros::get_tamanio_buffer(){
	return parametros[1];
}
		
bool ParserParametros::get_monitoreo(){
	return ( parametros[2] == activado);
}	

bool ParserParametros::convertir_muestreo(char* dato){
	if( dato != NULL){
		if(strcmp(dato,"-d")!=0)
			return false;
		else{
			parametros[2]=activado;
			return true;
		}
	}
	else{
		parametros[2]=no_activado;
		return true;
	}
		
}


void ParserParametros::parsear(char* vec_parametros[], int cant_parametros){
	int val;
	if (verificar_cant_parametros(cant_parametros)){
		this->cant_parametros = cant_parametros-1; //le saco el dato del nombre del archivo ejecutable
	}	
	std::string aux = vec_parametros[1];
	if (Parser::convertir_a_int(aux, val))
		parametros[0]=val;
	else
		throw std::runtime_error("Error - El primer parametro debe ser numerico y positivo.");
	aux = vec_parametros[2];
	if (Parser::convertir_a_int(aux, val))
		parametros[1]=val;
	else 
		throw std::runtime_error("Error - El segundo parametro debe ser numerico y positivo.");
	if(cant_parametros>3)
		if(!convertir_muestreo(vec_parametros[3]))
			throw std::runtime_error("Error - Parametro incorrecto. Para activar el muestreo ingresar '-d'.");
}
